package com.example.zqr.dto;

import com.example.zqr.pojo.Category;
import com.example.zqr.pojo.Product;
import lombok.Data;
import net.sf.json.JSONArray;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

@Data
public class ProductDto extends Product {

    private Category category;

    public ProductDto(Product product) {
        setProid(product.getProid());
        setCateid(product.getCateid());
        setName(product.getName());
        setSubtitle(product.getSubtitle());
        setMainimage(product.getMainimage());
        setPrice(product.getPrice());
        setDisprice(product.getDisprice());
        setStock(product.getStock());
        setStatus(product.getStatus());
        setSubimages(product.getSubimages());
        setDetail(product.getDetail());
        setDescription(product.getDescription());
        setCreatetime(product.getCreatetime());
        setUpdatetime(product.getUpdatetime());
    }
    /**
     * 计算并获取商品的折扣字符串。
     * 折扣计算公式为：(原价 - 现价) / 原价 * 100%。
     * @return 格式化的折扣字符串，例如"-20%"。
     */
    public String getDiscount() {
        double discount = (getPrice().doubleValue() - getDisprice().doubleValue()) / getPrice().doubleValue();
        return "-"+(int)(discount*100)+"%";
    }

    /**
     * 获取格式化的商品状态描述。
     * 根据商品状态码返回对应的状态描述。
     * @return 商品状态的描述。
     */
    public String getFmtStatus() {
        if (getStatus() == null) {
            return "未设置";
        }
        switch (getStatus()) {
            case 1:
                return "在售";
            case 2:
                return "下架";
            default:
                return "未设置";
        }
    }
    /**
     * 获取格式化的更新时间。
     * 如果更新时间不为空，则按照"yyyy/MM/dd HH:mm:ss"格式返回，否则返回空字符串。
     * @return 格式化的更新时间或空字符串。
     */
    public String getFmtUpdatetime() {
        if (getUpdatetime() != null) {
            SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            return f.format(getUpdatetime());
        } else {
            return "";
        }
    }
    /**
     * 将商品的副图片列表从JSONArray转换为List<String>。
     * @return 商品副图片的字符串列表。
     */
    public List<String> getSubimagesList() {
        List<String> res = new ArrayList<>();
        if (getSubimages() != null) {
            JSONArray jsonArray = JSONArray.fromObject(getSubimages());
            for (Object o : jsonArray) {
                res.add(o.toString());
            }
        }
        return res;
    }
}
